package net.pws.oos.biz.query;

import java.util.List;
import java.util.Map;

import net.pws.oos.biz.model.Indicator;
import net.pws.oos.biz.model.IndicatorValue;
import net.pws.oos.biz.query.parameter.IndicatorQueryParameter;
import net.pws.oos.biz.query.parameter.IndicatorValueQueryParameter;
import net.pws.oos.biz.query.parameter.OperateLogQueryParameter;

@SuppressWarnings("rawtypes")
public interface IndicatorFinder {
    
    /**
     * @param id
     * @return
     */
    public IndicatorValue getIndicatorValue(String id);
    
    /**
     * 根据指标值名称及指标绑定属性获取指标值
     * @param name 指标值
     * @param boundProperties 指标绑定属性
     * @return
     */
    public IndicatorValue getIndicatorValueByName(String name,String boundProperties);
    
    /**
     * 针对延迟加载
     * 
     * @param id
     * @return
     */
    public IndicatorValue getIndicatorValueMap(String id);
    
    /**
     * @param queryParameter
     * @return
     */
    public int countIndicatorValue(IndicatorValueQueryParameter queryParameter);
    
    /**
     * @param queryParameter
     * @param start
     * @param limit
     * @return
     */
    public List<IndicatorValue> getIndicatorValueList(IndicatorValueQueryParameter queryParameter,
                                  int start,
                                  int limit);
    
    public int countIndicatorValueWithRoles(IndicatorValueQueryParameter queryParameter);
    
    public List<Map> listIndicatorValueWithRoles(IndicatorValueQueryParameter queryParameter);
    
    /**
     * 获得指定指标项的指标值
     * 
     * @param indicatorId
     * @return
     */
    public List<IndicatorValue> getIndicatorValueListByIndicator(String indicatorId);
    
    /**
     * 根据绑定属性值（即字段名）获得指定指标项的指标值
     * 
     * @param boundProperties
     * @return
     */
    public List<IndicatorValue> getIndicatorValueListByIndicatorProp(String boundProperties);
    
    /**
     * 获得指定指标项及下属指标项的指标值
     * 
     * @param indicatorId
     * @return
     */
    public List<IndicatorValue> getIndicatorValueListByIndicatorTree(String indicatorId);
    
    /**
     * 根据指定的ID获得指标值
     * 
     * @param ids
     *            以逗号分隔的指标值ID
     * @return
     */
    public List<IndicatorValue> getIndicatorValueList(String ids);
    
    /**
     * 针对延迟加载
     * 
     * @param queryParameter
     * @param start
     * @param limit
     * @return
     */
    public List<Map> getIndicatorValueMapList(IndicatorValueQueryParameter queryParameter,
                                    int start,
                                    int limit);
    
    /**
     * @param queryParameter
     * @return
     */
    public int countOurIndicatorValue(IndicatorValueQueryParameter queryParameter);
    
    /**
     * @param queryParameter
     * @param start
     * @param limit
     * @return
     */
    public List<IndicatorValue> getOurIndicatorValueList(IndicatorValueQueryParameter queryParameter,
                                     int start,
                                     int limit);
    
    /**
     * 针对延迟加载
     * 
     * @param queryParameter
     * @param start
     * @param limit
     * @return
     */
    public List<Map> getOurIndicatorValueMapList(IndicatorValueQueryParameter queryParameter,
                                       int start,
                                       int limit);
    
//    /**
//     * @param roleId
//     * @return
//     */
//    public int countBindedIndicatorValue(String roleId);
    
//    /**
//     * @param roleId
//     * @param start
//     * @param limit
//     * @return
//     */
//    public List<Map> getBindedIndicatorValueList(String roleId, int start, int limit);
    
//    /**
//     * @param queryParameter
//     * @return
//     */
//    public int countUnbindedIndicatorValue(RoleQueryParameter queryParameter);
    
//    /**
//     * @param queryParameter
//     * @param start
//     * @param limit
//     * @return
//     */
//    public List<Map> getUnbindedIndicatorValueList(RoleQueryParameter queryParameter,
//                                         int start,
//                                         int limit);
    
//    /**
//     * @param userId
//     * @return
//     */
//    public int countBindedRole(String userId);
    
//    /**
//     * @param userId
//     * @param start
//     * @param limit
//     * @return
//     */
//    public List<Map> getBindedRoleList(String userId, int start, int limit);
    
//    /**
//     * @param queryParameter
//     * @return
//     */
//    public int countUnbindedRole(IndicatorValueQueryParameter queryParameter);
    
//    /**
//     * @param queryParameter
//     * @param start
//     * @param limit
//     * @return
//     */
//    public List<Map> getUnbindedRoleList(IndicatorValueQueryParameter queryParameter,
//                                         int start,
//                                         int limit);
    
//    /**
//     * @param queryParameter
//     * @return
//     */
//    public int countRole(RoleQueryParameter queryParameter);
    
//    /**
//     * @param queryParameter
//     * @param start
//     * @param limit
//     * @return
//     */
//    public List<Role> getRoleList(RoleQueryParameter queryParameter,
//                                  int start,
//                                  int limit);
    
    /**
     * @param queryParameter
     * @return
     */
    public int countIndicator(IndicatorQueryParameter queryParameter);
    
    /**
     * @param queryParameter
     * @param start
     * @param limit
     * @return
     */
    public List<Indicator> getIndicatorList(IndicatorQueryParameter queryParameter,
                                                  int start,
                                                  int limit);
    
    /**
     * 针对延迟加载，直接将map映射到页面
     * 
     * @param queryParameter
     * @param start
     * @param limit
     * @return
     */
    public List<Map> getIndicatorMapList(IndicatorQueryParameter queryParameter,
                                            int start,
                                            int limit);
    
    /**
     * @param id
     * @return
     */
    public List<Indicator> getIndicatorChildren(String id);
    
    /**
     * @param id
     * @param excludeId
     * @return
     */
    public List<Indicator> getIndicatorChildren(String id,
                                                      String excludeId);
    
    /**
     * @param queryParameter
     * @return
     */
    public int countOurIndicator(IndicatorQueryParameter queryParameter);
    
    /**
     * @param queryParameter
     * @param start
     * @param limit
     * @return
     */
    public List<Indicator> getOurIndicatorList(IndicatorQueryParameter queryParameter,
                                                     int start,
                                                     int limit);
    
    /**
     * 针对延迟加载，直接将map映射到页面
     * 
     * @param queryParameter
     * @param start
     * @param limit
     * @return
     */
    public List<Map> getOurIndicatorMapList(IndicatorQueryParameter queryParameter,
                                               int start,
                                               int limit);
    
    /**
     * @param id
     * @return
     */
    public Indicator getIndicator(String id);
    
    /**
     * 针对延迟加载
     * 
     * @param id
     * @return
     */
    public Indicator getIndicatorMap(String id);
    
    /**
     * 根据id和深度获得某级别的指标项
     * 
     * @param id
     * @param depth
     * @return
     */
    public Indicator getDepthIndicator(String id, int depth);
    
    public int countOperateLog(OperateLogQueryParameter queryParameter);
    
    public List<Map> listOperateLog(OperateLogQueryParameter queryParameter);
    
    /**
     * 查询指定层级指标项
     * @param depth 层级
     * @return
     */
    public List<Indicator> getIndicatorByDepth(int depth);
}
